# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
@Time : 2022/10/6 0006 14:31
@Author : 测试开发工程师
@File : 32. 三次握手和四次挥手.py
@Software: PyCharm
============================
"""

"""
对 tcp 建立连接过程的理解
对 tcp 断开连接过程的理解

技术点：
    tcp 报文头信息
        序号：占 4 个字节，表示发送的数据字节流
        确认号： 占 4 个字节，发送方期待接受的下一序列号，只有 ACK = 1 时才有效
        ACK : 确认号的标志，ACK = 1 表示确认号有效，ACK = 0表示报文不含确认号信息
        SYN : 连接请求序号标志，用于建立连接，SYN = 1 表示请求连接
        FIN ： 结束标志，用于释放连接，为1表示关闭本方数据流
    
    tcp 建立连接过程
        三次握手：
            首先 客户端(client) 发送连接请求报文  -  第一次握手（建立连接）
            server 端接受连接后回复 ACK 报文，并为这次连接分配资源  - 第二次握手
            client 端接收到 ACK 报文后也向 server 端发送 ACK 报文，并分配资源 - 第三次握手
            
    tcp 断开连接过程
        四次挥手：
            假设 client 端发起中断连接请求，也就是发送 FIN 报文
            server 端 接到 FIN 报文后，先发送 ACK，这个时候 client 端进入 FIN_WAIT 状态，继续等待 server 端的 FIN 报文
            当 server 端确定数据已发送完成，则向 client 端发送 FIN 报文
            client 端收到 FIN　报文后，发送 ACK 后进入 TIME_WAIT 状态，如果 server 端没有收到 ACK 则可以重传。 client 端等待
            2MSL 后依旧没有收到回复，则证明 server 端已正常关闭
            client 端关闭连接
"""
